home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / clue.lha / clue / doc / clue.tex / node102_mn.html < prev    next >
Text File  |  1989-07-12  |  7KB  |  163 lines

  1.  
  2. <H3><A ID="SECTION003011100000000000000"><tex2html_anchor_invisible_mark></A> <A ID="ch:callbacks"><tex2html_anchor_mark></A><BR>
  3. Callbacks
  4. </H3><#4948#>
  5.            
  6.       
  7.  
  8.  
  9. <P>
  10. A <#892#><B>callback</B><#892#><A ID="893"><tex2html_anchor_invisible_mark></A> is a function which represents a connection
  11. between a contact and the rest of an application program. A contact calls a
  12. callback function in order to report the results of the user interface component
  13. which it represents. Thus, callbacks have a crucial role in a CLUE application:
  14. they provide a link between the application and its user interface. Callbacks
  15. represent the application ``semantics'' of the user interface.
  16. <A ID="894"><tex2html_anchor_invisible_mark></A>
  17. Similarly, callbacks can be used by a contact to communicate its results to
  18. another contact. This means that callbacks are also involved in the
  19. implementation of the ``syntax'' that ties together the various components of a
  20. user interface. <A ID="895"><tex2html_anchor_invisible_mark></A>
  21.  
  22. <P>
  23. Each <#896#><TT>contact</TT><#896#> instance has a <#897#><TT>callbacks</TT><#897#> slot containing a list of its
  24. callback functions.  The <#898#><TT>callbacks</TT><#898#> slot is an association list containing
  25. elements of the form 
  26. <#4221#><TT>(<#899#><EM>callback-name (function argument*)*</EM><#899#>)</TT><#4221#>.
  27. That is, the <#900#><TT>callbacks</TT><#900#> list associates a <#901#><EM>callback-name</EM><#901#> symbol with a
  28. sequence of functions and their (optional) argument lists.  The <#902#><EM>callback-name</EM><#902#> is used by the contact programmer to invoke each of the
  29. associated functions with the given arguments.
  30.  
  31. <P>
  32. Both the contact programmer and the application programmer are involved in
  33. establishing a contact's callbacks.  The contact programmer defines a set of
  34. callback names and, for each callback, the basic argument and return value
  35. protocol to be used.  The contact programmer is also responsible for the
  36. implementation of contact methods, in which callback functions are invoked via
  37. the callback names.  The application programmer is responsible for associating
  38. with each callback name the actual function(s) and arguments used to implement
  39. it. The application programmer can also extend the basic argument protocol used
  40. by associated functions.
  41.  
  42. <P>
  43. The relationship between a callback name and an associated function resembles
  44. that between a method name and the code which implements it.  In particular, the
  45. set of callback names used is the same for all instances of a contact class.
  46. These callback names and interfaces constitute a critical part of the
  47. application programmer interface to a contact class.
  48. <A ID="903"><tex2html_anchor_invisible_mark></A>
  49. However, the key difference is that the associated callback functions and
  50. arguments are instance data that are usually different for each class instance.
  51.  
  52. <P>
  53. For example, a contact programmer may define a slider contact which uses a
  54. callback named <#904#><TT>user-changedvalue</TT><#904#>.  The contact programmer arranges for
  55. this callback to be invoked each time the user manipulates the slider position
  56. and for it to be passed an argument indicating the new slider value.  A
  57. programmer of a robot control application may use such a slider to
  58. allow a user to adjust the rate at which the robot moves.  The application
  59. programmer will thus want to modify the slider's <#905#><TT>callbacks</TT><#905#> slot by adding
  60. an element like <#906#><TT>(user-changed-value change-robot-speed)</TT><#906#>. In this case,
  61. <#907#><TT>change-robot-speed</TT><#907#> should be an application function which accepts a
  62. single argument specifying the new robot speed.
  63.  
  64. <P>
  65. Callback functions are called using the <#908#><TT>apply-callback</TT><#908#> macro.  The <#909#><TT>callbacks</TT><#909#> list of a contact can be modified by the functions <#910#><TT>add-callback</TT><#910#>
  66. and <#911#><TT>delete-callback</TT><#911#>. Only one callback is involved in the basic
  67. contact application programmer interface described in
  68. Section~<A HREF=<tex2html_cr_mark>#ch:api#912><tex2html_cr_mark></A> --- the <#913#><TT>:destroy</TT><#913#> callback, which is called by
  69. the primary <#914#><TT>destroy</TT><#914#> method.
  70.  
  71. <P>
  72. <#4644#>
  73. <#4222#><FONT SIZE="+1"><#915#><B>apply-callback Macro, contact</B><#915#></FONT><#4222#> 
  74. <A ID="916"><tex2html_anchor_invisible_mark></A>
  75. <A ID="917"><tex2html_anchor_invisible_mark></A>
  76.  
  77. <P>
  78. <DIV class="RIGHT">
  79. <tex2html_image_mark>#tex2html_wrap_inline9823#
  80. </DIV><#4644#>
  81.  
  82. <P>
  83. <DIV class="RIGHT">
  84. <tex2html_image_mark>#tex2html_wrap_inline9826# 
  85. </DIV>
  86. <P>
  87. <DIV class="RIGHT"><tex2html_image_mark>#tex2html_wrap_inline9827#</DIV>
  88. <P>
  89. <DIV class="RIGHT"><tex2html_image_mark>#tex2html_wrap_inline9828#</DIV>
  90. <P>
  91. <DIV class="RIGHT"><tex2html_image_mark>#tex2html_wrap_inline9829#
  92. </DIV>
  93.  
  94. <P>
  95. <#4646#>
  96. <#4228#><FONT SIZE="+1"><#950#><B>callback-p Function, contact</B><#950#></FONT><#4228#> 
  97. <A ID="951"><tex2html_anchor_invisible_mark></A>
  98. <A ID="952"><tex2html_anchor_invisible_mark></A>
  99.  
  100. <P>
  101. <DIV class="RIGHT">
  102. <tex2html_image_mark>#tex2html_wrap_inline9830#
  103. </DIV><#4646#>
  104.  
  105. <P>
  106. <DIV class="RIGHT">
  107. <tex2html_image_mark>#tex2html_wrap_inline9833#
  108. </DIV>
  109.  
  110. <P>
  111. <#4648#>
  112. <#4231#><FONT SIZE="+1"><#967#><B>add-callback Function, contact</B><#967#></FONT><#4231#> 
  113. <A ID="968"><tex2html_anchor_invisible_mark></A> 
  114. <A ID="969"><tex2html_anchor_invisible_mark></A>
  115. <DIV class="RIGHT">
  116. <tex2html_image_mark>#tex2html_wrap_inline9834#
  117. </DIV><#4648#>
  118.  
  119. <P>
  120. <DIV class="RIGHT">
  121. <tex2html_image_mark>#tex2html_wrap_inline9837#
  122. </DIV>
  123.  
  124. <P>
  125. <#4649#>
  126. <#4234#><FONT SIZE="+1"><#990#><B>delete-callback Function, contact</B><#990#></FONT><#4234#>
  127. <A ID="991"><tex2html_anchor_invisible_mark></A> 
  128. <A ID="992"><tex2html_anchor_invisible_mark></A>
  129. <DIV class="RIGHT">
  130. <tex2html_image_mark>#tex2html_wrap_inline9838#
  131. </DIV><#4649#>
  132.  
  133. <P>
  134. <DIV class="RIGHT">
  135. <tex2html_image_mark>#tex2html_wrap_inline9841#
  136. </DIV>
  137.  
  138. <P>
  139. <#4650#>
  140. <#4237#><FONT SIZE="+1"><#1005#><B>*contact* Variable</B><#1005#></FONT><#4237#> 
  141. <A ID="1006"><tex2html_anchor_invisible_mark></A><A ID="1007"><tex2html_anchor_invisible_mark></A>
  142.  
  143. <P>
  144. <DIV class="RIGHT">
  145. <tex2html_image_mark>#tex2html_wrap_inline9842#
  146. </DIV><#4650#>
  147.  
  148. <P>
  149. <#4651#>
  150. <#4239#><FONT SIZE="+1"><#1012#><B>:destroy Callback, contact</B><#1012#></FONT><#4239#> 
  151. <A ID="1013"><tex2html_anchor_invisible_mark></A>
  152. <DIV class="RIGHT">
  153. <tex2html_image_mark>#tex2html_wrap_inline9845#
  154. </DIV><#4651#>
  155.  
  156. <P>
  157. <DIV class="RIGHT">
  158. <tex2html_image_mark>#tex2html_wrap_inline9847#
  159. </DIV>
  160.  
  161. <P>
  162. <#4958#>by-1<#4958#>
  163.  =0 <#4959#>=0 <#4963#>